/* eslint-disable no-async-promise-executor */
const model = require("../models/model")
const Message = model.message.Message
exports.getList = async(ctx) => {
  const { verify } = require('../models/tokenFn')
  const userId = verify(ctx.header)
  const { page, size, type } = ctx.request.query
  if (!page || !size || !userId) {
    ctx.fail('参数错误')
    return
  }
  let where
  if (type) { // 有传公告类型
    where = {
      order: [
        ['createTime', 'DESC'],
      ],
      where: { type: type },
      offset: (parseInt(page) - 1) * parseInt(size),
      limit: parseInt(size)
    }
  } else { // 没有传
    where = {
      order: [
        ['updateTime', 'DESC'],
      ],
      offset: (parseInt(page) - 1) * parseInt(size),
      limit: parseInt(size)
    }
  }
  const res = await Message.findAndCountAll(where)
  if (res.rows !== undefined) {
    res.rows.forEach(item => {
      if (item.isShow !== undefined) {
        item.isShow = item.isShow != 0
      }
    })
    ctx.success({
      total: res.count, // 总页数
      pageNum: Math.trunc((res.count + (size -1) )/size), // 分页数量
      page: parseInt(page), // 页码
      size: parseInt(size), // 页数
      list: res.rows
    })
  }
}
exports.modifyShow = async(ctx) => {
  const { verify } = require('../models/tokenFn')
  const userId = verify(ctx.header)
  const { id, isShow, type } = ctx.request.body
  if (isShow === undefined || !type) {
    ctx.fail('参数错误')
    return
  }

  let res
  if (type === 'system') { // 如果是系统公告的修改
    res = await allFn({ where: { isShow: 1, type: type }}) // 查询条件传参方式
  } else { // 如果是个人
    res = await allFn({ where: { type: type, isShow: 1, adminId: userId }}) // 查询条件传参方式
  }
  if (res) {
    ctx.success('', '操作成功')
  } else {
    ctx.fail(res)
  }

  function modifyIsShow() {
    return new Promise(async(resolve) => {
      let data = Object.assign(ctx.request.body, { adminId: userId })
      let res
      if (id) { // 是否有id
        res = await Message.update(data, { where: { id: id }})
        if (res[0] == 1) {
          resolve('success')
        } else {
          resolve('修改失败')
        }
      } else {
        res = await Message.create(data)
        if (res) {
          resolve('success')
        } else {
          resolve('增加失败')
        }
      }
    })
  }
  function allFn(where) {
    return new Promise(async(resolve) => {
      if (isShow) { // 修改
        const res = await Message.findOne(where) // 查找是否有已经使用了的条目
        console.log(res, where, '查找是否有已经使用了的条目')
        if (res) { // 有
          const modify_res = await Message.update({ isShow: 0 }, {where: { id: res.id }}) // 把它修改成false
          if (modify_res[0] == 1) {
            const modifyIsShow_res = await modifyIsShow() // 修改false后再把需要改为true的更新
            if (modifyIsShow_res) {
              resolve('success')
            }
          } else {
            resolve('修改失败')
          }
        } else { // 没有直接修改
          const modifyIsShow_res = await modifyIsShow()
          if (modifyIsShow_res) {
            resolve('success')
          }
        }
      } else { // 传了fasle直接修改
        const modifyIsShow_res = await modifyIsShow()
          if (modifyIsShow_res) {
            resolve('success')
          }
      }
    })
  }
}
exports.delete = async(ctx) => {
  const { id } = ctx.request.query
  if (!id) {
    ctx.fail('参数错误')
    return
  }
  const res = await Message.destroy({ where: { id: id }})
  if (res) {
    ctx.success('', '删除成功')
  } else {
    ctx.fail('删除失败')
  }
}
